package com.ruixin.parser;

import com.ruixin.annotation.Bean;
import com.ruixin.annotation.Parser;
import com.ruixin.base.BaseParser;
import com.ruixin.base.exception.BaseException;
import com.ruixin.base.proxy.ProxyHelper;
import com.ruixin.base.util.BeanUtil;
import com.ruixin.base.util.StringUtil;
import com.ruixin.config.ApplicationContext;

import java.lang.annotation.Annotation;

/**
 * Bean注解处理
 */
@Parser(annotation = Bean.class)
public class BeanParser extends BaseParser<ApplicationContext> {

    public BeanParser(ApplicationContext context, Class<? extends Annotation> type) {
        super(context, type);
    }

    @Override
    public void parseClass(Class<?> clz) throws BaseException {
        super.parseClass(clz);
        Bean bean = BeanUtil.getAnnotation(clz, Bean.class);
        String beanName = bean.value();
        if(StringUtil.isBlackOrNull(beanName)){
            beanName = bean.name();
            if(StringUtil.isBlackOrNull(beanName)){
                beanName = BeanUtil.getDefaultBeanName(clz);
            }
        }
        Object beanObj = ProxyHelper.newProxyInstance(clz);
        this.context.addBean(beanName,beanObj);
    }
}
